home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 10
/
FM Towns Free Software Collection 10.iso
/
ms_dos
/
game
/
add
/
add.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-02-19
|
55KB
|
2,111 lines
/***************************************************************************/
/* ****** ****** */
/***** ~ADD~ *****/
/*** ***/
/*** for FM-TOWNS FREE WARE COLLECTION 10 ***/
/*** ***/
/*** 1995/ 1/15 --> 1995/ 2/20 ***/
/*** ***/
/***** Produced and Copyright KIKURIN *****/
/* ****** ****** */
/***************************************************************************/
#define Gput640_DISK_to_VRAM Gput_DISK_to_VRAM
#define beep beep_FM
//#define beep beep_PC
#define WIN_MAX 15 /* 総ウィンドウ数 */
#define BUT_MAX 146 /* 総ボタン数 */
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <string.h>
#include "ESC.H" /* 私製エスケープシーケンスマクロ */
#include "GBC.H" /* 私製グラフィックデバイスアクセス関数ヘッダ */
#include "MBC.H" /* 私製マウスBIOSアクセス関数ヘッダ */
#include "MOS_WAIT.H" /* 私製マウスウエイト関数ヘッダ */
#include "WINDOW.H" /* 私製ウィンドウ管理関数ヘッダ */
#include "VRAM_CNT.H" /* 私製VRAMアクセス関数ヘッダ */
#include "WIN_EXP.H" /* WINDOW拡張機能関数 */
#define CARD_ALL 60 /* 総カード数(内-52はラッキーC) */
#define PLAY_HUMAN 0x00
#define PLAY_COM 0x01
#define PLAY_REST 0x02
#define COND_FLAT -1
#define COND_PLAY 0
#define COND_WIN 1
#define FADE_SPEED 16 /* FADE IN/OUTスピード */
char GBC_work[8192]; /* GBC作業域 */
char ADD_work[2048]; /* ゲーム作業域 */
char NUM_work[11][800]; /* CG作業域 */
int wind[WIN_MAX];
int TARGET_P = 0; /* ターゲットプレイヤー */
int END_FLAG = 0; /* プログラム終了フラグ */
int ADD_FLAG = 0; /* ゲーム終了フラグ */
int POUR_FLAG = 0; /* 流しフラグ */
int WIN_FLAG = 0; /* 勝者フラグ */
char PAL[16][ 3] ; /* パレット作業域 */
char *KEY_BOARD ; /* 平仮名文字列記憶域 */
char DUM_NAME[10] ; /* 名前入力作業域 */
char NAME_LNG ; /* 名前長 */
char *MOJ_WORK[] ; /* メッセージ作業域 */
int KEY_NUM ; /* キーナンバー(-1で無し) */
int PLY_NUM ; /* 実際にプレイしてる人数 */
int LIFE_NUM ; /* 残りプレイヤー数 */
int PASS_NUM ; /* パスのカウント */
int LUC_NUM ;
int M_CARD ; /* 山のカード残数 */
char CHK_CARD[CARD_ALL]; /* 各カードの位置 */
/* 0:山 1:プレイヤーの手元 */
/* 2:捨てられた 3:捨てたばかり */
char SEL_CARD[20] ; /* 手持ちカードの選択(1:選択) */
char SEL_ONLY[ 3] ; /* 選択カードの抽出 */
struct PLD_1 {
unsigned char Name[10];
unsigned int Face;
unsigned int Money;
unsigned int Win,Lose;
unsigned int Play;
} P_DATA1[ 4]; /* プレイヤーデータ その1 */
struct PLD_2 {
unsigned int Player;
unsigned int Life; /* -1:dead 0:Playing 1:win */
unsigned int Card_num;
unsigned int Card[20];
signed int Adjust;
} P_DATA2[ 4]; /* プレイヤーデータ その2 */
char *val_to_moj( unsigned,char *,char );
main()
{
init();
ADD_title();
window_open( 1 );
screen_fade_in();
while ( END_FLAG== 0 )
if ( button_wait( 0 )== 0 ) window_sub();
screen_fade_out();
__screen( 1, 1 ); __gcls();
__screen( 0, 0 ); __gcls();
cls;
cursor_ON();
beep( 1200, 0 );
}
/***************************************************************************
イニシャライズ
***************************************************************************/
init()
{
int _lp;
cursor_OFF();
cls;
__gbc_user( GBC_work,8192 );
__back_color( 14 );
for ( _lp= 0;_lp<16;_lp++ )
__palette( _lp, 0, 0, 0 );
__screen( 1, 0 );
Gput640_DISK_to_VRAM( "NUMBERS.CG", 0, 0 );
for ( _lp= 0;_lp<11;_lp++ )
VRAM_Gget( 40*_lp, 0, 40, 40,NUM_work[_lp] );
Gput640_DISK_to_VRAM( "CARD.CG", 0, 0 );
__screen( 0, 0 );
MOUSE_SETUP;
MOUSE_ON ;
window_init( WIN_MAX );
window_memory_switch( _MEMORY_OFF );
}
/***************************************************************************
画面描画 01~10 & 整数->全角文字列変換関数
***************************************************************************/
screen_01( char _num )
{
int _dsx1,_dsy1,_dsx2,_dsy2;
_dsx1= 48+192*( P_DATA1[_num].Face % 3 );
_dsy1=256+ 64*( P_DATA1[_num].Face / 3 );
_dsx2= 24+304*( _num % 2 );
_dsy2=144+120*( _num / 2 );
ADD_Gcopy( _dsx1,_dsy1, 64, 64,_dsx2+ 16,_dsy2+ 32 );
__line( _dsx2+192,_dsy2+ 12, 63, 15,_PSET,14,_FULL,_BETA,14 );
__line( _dsx2+192,_dsy2+ 36, 79, 15,_PSET,14,_FULL,_BETA,14 );
__line( _dsx2+176,_dsy2+ 60, 31, 15,_PSET,14,_FULL,_BETA,14 );
__line( _dsx2+224,_dsy2+ 60, 31, 15,_PSET,14,_FULL,_BETA,14 );
__line( _dsx2+176,_dsy2+ 84, 95, 15,_PSET,14,_FULL,_BETA,14 );
__symbol( _dsx2+192,_dsy2+ 12,P_DATA1[_num].Name, 1, 1, 3, 0,_PSET, 0 );
__symbol( _dsx2+192,_dsy2+ 36,val_to_moj( P_DATA1[_num].Money,ADD_work, 5 ), 1, 1, 3, 0,_PSET, 0 );
__symbol( _dsx2+176,_dsy2+ 60,val_to_moj( P_DATA1[_num].Win ,ADD_work, 2 ), 1, 1, 3, 0,_PSET, 0 );
__symbol( _dsx2+224,_dsy2+ 60,val_to_moj( P_DATA1[_num].Lose ,ADD_work, 2 ), 1, 1, 3, 0,_PSET, 0 );
__symbol( _dsx2+176,_dsy2+ 84,MOJ_WORK[P_DATA1[_num].Play], 1, 1, 3, 0,_PSET, 0 );
}
char *val_to_moj( unsigned _val,char *_ret,char _siz )
{
char *_num="0123456789";
long _wei=( long )pow( 10.0,( double )( _siz- 1 ) );
*_ret='\0';
for ( ;_siz> 0;_siz-- ) {
if ( _wei>_val && _wei> 1 )
strcat( _ret," " );
else
strncat( _ret,_num+ 2*( ( int )( _val/_wei ) % 10 ), 2 );
_wei/=10;
}
return ( _ret );
}
screen_02()
{
__line( 32, 16, 63, 15,_PSET,14,_FULL,_BETA,14 );
__symbol( 32, 16,DUM_NAME, 1, 1, 5, 0,_PSET, 0 );
}
screen_03()
{
int _dsx1,_dsy1,_dsx2,_dsy2,_lp,_num;
get_window_xy( 8 );
for ( _lp= 0;_lp<PLY_NUM;_lp++ ) {
_num = P_DATA2[_lp ].Player ;
_dsx1= 48+192*( P_DATA1[_num].Face % 3 );
_dsy1= 256+ 64*( P_DATA1[_num].Face / 3 );
_dsx2=_wsx ;
_dsy2=_wsy+ 64+ 80*( _lp );
box_frame( _dsx2+ 7,_dsy2+ 7, 65, 65,_ON );
ADD_Gcopy( _dsx1,_dsy1, 64, 64,_dsx2+ 8,_dsy2+ 8 );
__symbol( _dsx2+ 80,_dsy2+ 8,"なまえ", 1, 1, 3, 0,_PSET, 0 );
__symbol( _dsx2+ 80,_dsy2+ 40,"持ち金", 1, 1, 3, 0,_PSET, 0 );
__symbol( _dsx2+ 96,_dsy2+ 24,P_DATA1[_num].Name, 1, 1, 5, 0,_PSET, 0 );
__symbol( _dsx2+ 80,_dsy2+ 56,val_to_moj( P_DATA1[_num].Money,ADD_work, 5 ), 1, 1, 5, 0,_PSET, 0 );
}
get_window_xy( 9 );
__symbol( _wsx+ 16,_wsy+ 8,"キーナンバー", 1, 1, 5, 0,_PSET, 0 );
__symbol( _wsx+336,_wsy+ 8,"キーナンバー", 1, 1, 5, 0,_PSET, 0 );
get_window_xy( 10 );
for ( _lp= 0;_lp<PLY_NUM- 1;_lp++ ) {
_dsx1=_wsx+ 8+160*_lp;
_dsy1=_wsy ;
ADD_Gcopy( 0,320, 48, 64,_dsx1+ 32,_dsy1+ 24 );
__symbol( _dsx1+ 56,_dsy1+ 88,"まい", 1, 1, 3, 0,_PSET, 0 );
}
get_window_xy( 11 );
__symbol( _wsx+ 16,_wsy+ 8,"なまえ:" , 1, 1, 3, 0,_PSET, 0 );
__symbol( _wsx+ 16,_wsy+ 24,"持ち金:¥" , 1, 1, 3, 0,_PSET, 0 );
__symbol( _wsx+ 16,_wsy+ 40,"戦 歴: 勝 敗", 1, 1, 3, 0,_PSET, 0 );
__symbol( _wsx+ 16,_wsy+ 56,"カード: まい", 1, 1, 3, 0,_PSET, 0 );
}
screen_04( int _num1 )
{
int _dsx1,_dsy1,_num2;
get_window_xy( 11 );
_num2=P_DATA2[_num1].Player ;
_dsx1= 48+192*( P_DATA1[_num2].Face % 3 );
_dsy1=256+ 64*( P_DATA1[_num2].Face / 3 );
ADD_Gcopy( _dsx1,_dsy1, 64, 64,_wsx+192,_wsy+ 8 );
__line( _wsx+ 80,_wsy+ 8, 95, 15,_PSET,14,_FULL,_BETA,14 );
__line( _wsx+ 96,_wsy+ 24, 79, 15,_PSET,14,_FULL,_BETA,14 );
__line( _wsx+ 80,_wsy+ 40, 31, 15,_PSET,14,_FULL,_BETA,14 );
__line( _wsx+128,_wsy+ 40, 31, 15,_PSET,14,_FULL,_BETA,14 );
__line( _wsx+ 80,_wsy+ 56, 63, 15,_PSET,14,_FULL,_BETA,14 );
__symbol( _wsx+ 96,_wsy+ 8,P_DATA1[_num2].Name, 1, 1, 5, 0,_PSET, 0 );
__symbol( _wsx+ 96,_wsy+ 24,val_to_moj( P_DATA1[_num2].Money ,ADD_work, 5 ), 1, 1, 5, 0,_PSET, 0 );
__symbol( _wsx+ 80,_wsy+ 40,val_to_moj( P_DATA1[_num2].Win ,ADD_work, 2 ), 1, 1, 5, 0,_PSET, 0 );
__symbol( _wsx+128,_wsy+ 40,val_to_moj( P_DATA1[_num2].Lose ,ADD_work, 2 ), 1, 1, 5, 0,_PSET, 0 );
__symbol( _wsx+112,_wsy+ 56,val_to_moj( P_DATA2[_num1].Card_num,ADD_work, 2 ), 1, 1, 5, 0,_PSET, 0 );
}
screen_05( int _num )
{
int _dsx1,_dsy1,_dsx2,_card,_lp;
get_window_xy( 12 );
__line( _wsx+ 8,_wsy+ 16,351, 63,_PSET,14,_FULL,_BETA,14 );
for ( _lp= 1;_lp<=P_DATA2[_num].Card_num;_lp++ ) {
_card= P_DATA2[_num].Card[P_DATA2[_num].Card_num-_lp]; ;
_card=_card<52 ? _card : 52;
if ( P_DATA1[P_DATA2[_num].Player].Play==PLAY_COM )
_card=65;
_dsx1= ( _card % 13 )* 48 ;
_dsy1= ( _card / 13 )* 64 ;
_dsx2=_wsx+( P_DATA2[_num].Card_num-_lp )* 16+ 8;
ADD_Gcopy( _dsx1,_dsy1, 48, 64,_dsx2,_wsy+ 16 );
}
for ( _lp= 0;_lp<20;_lp++ )
SEL_CARD[_lp]= 0;
}
screen_06()
{
int _dsx1,_dsy1,_lp,_card;
int _num=ADD_get_select_only();
int _card_d[ 3][ 2] = { { 200, 0 },{ 160, 80 },{ 144, 56 } };
get_window_xy( 9 );
__line( _wsx+144,_wsy+ 8,159, 63,_PSET,14,_FULL,_BETA,14 );
_wsx+=_card_d[_num- 1][ 0];
for ( _lp= 0;_lp<_num;_lp++ ) {
_card=SEL_ONLY[_lp]<52 ? SEL_ONLY[_lp] : 52;
_dsx1=( _card % 13 )* 48 ;
_dsy1=( _card / 13 )* 64 ;
ADD_Gcopy( _dsx1,_dsy1, 48, 64,_wsx,_wsy+ 8 );
_wsx+=_card_d[_num- 1][ 1];
}
}
screen_07()
{
int _lp,_wei,_num;
get_window_xy( 9 );
MOUSE_OFF;
for ( _lp= 0,_wei=10;_lp< 2;_lp++,_wei/=10 ) {
_num=KEY_NUM==-1 ? 10 : ( KEY_NUM / _wei ) % 10;
VRAM_Gput( _wsx+ 16+ 56*_lp,_wsy+ 32, 40, 40,NUM_work[_num] );
VRAM_Gput( _wsx+336+ 56*_lp,_wsy+ 32, 40, 40,NUM_work[_num] );
}
MOUSE_ON ;
}
screen_08()
{
int _lp,_count= 0,_num1=TARGET_P,_num2;
get_window_xy( 10 );
if ( WIN_FLAG== 0 ) {
for ( _lp= 0;_lp<( LIFE_NUM- 1 );_lp++,_wsx+=160 ) {
do {
_num1=( _num1+ 1 ) % PLY_NUM;
_count++;
} while ( P_DATA2[_num1].Life!=COND_PLAY && _count<PLY_NUM );
_num2=P_DATA2[_num1].Player;
__line( _wsx+ 32,_wsy+ 8, 63, 15,_PSET,14,_FULL,_BETA,14 );
__line( _wsx+ 32,_wsy+ 88, 31, 15,_PSET,14,_FULL,_BETA,14 );
__symbol( _wsx+ 32,_wsy+ 8,P_DATA1[_num2].Name, 1, 1, 5, 0,_PSET, 0 );
__symbol( _wsx+ 32,_wsy+ 88,val_to_moj( P_DATA2[_num1].Card_num,ADD_work, 2 ), 1, 1, 5, 0,_PSET, 0 );
}
}
}
screen_09()
{
int _lp1,_lp2,_lp3,_lp4;
for ( _lp1= 0;_lp1< 2;_lp1++ )
for ( _lp2= 0;_lp2<40;_lp2+= 4 )
for ( _lp3= 0;_lp3< 5;_lp3++ )
for ( _lp4= 0;_lp4<16;_lp4+= 2 ) {
__line( 40*_lp4, 40*( _lp1== 1 )+ 80*_lp3+_lp2, 39, 3,_PSET, 0,_FULL,_BETA, 0 );
__line( 40+ 40*_lp4, 40*( _lp1== 0 )+ 80*_lp3+_lp2, 39, 3,_PSET, 0,_FULL,_BETA, 0 );
}
__back_color( 0 );
window_close( 8 );
window_close( 9 );
window_close( 10 );
window_close( 11 );
window_close( 12 );
screen_fade_out();
__back_color( 14 );
__gcls();
}
screen_10()
{
int _lp= 0,_dsx1,_dsy1,_num;
get_window_xy( 13 );
for ( ;_lp<PLY_NUM;_lp++ ) {
_num =P_DATA2[_lp].Player ;
_dsx1= 48+192*( P_DATA1[_num].Face % 3 );
_dsy1=256+ 64*( P_DATA1[_num].Face / 3 );
ADD_Gcopy( _dsx1,_dsy1, 64, 64,_wsx+ 40,_wsy+ 24 );
__symbol( _wsx+232,_wsy+ 24,P_DATA1[_num].Name, 1, 1, 5, 0,_PSET, 0 );
__symbol( _wsx+256,_wsy+ 40,val_to_moj( P_DATA2[_lp ].Card_num,ADD_work, 2 ), 1, 1, 5, 0,_PSET, 0 );
__symbol( _wsx+264,_wsy+ 56,val_to_moj( P_DATA2[_lp ].Adjust ,ADD_work, 4 ), 1, 1, 5, 0,_PSET, 0 );
__symbol( _wsx+248,_wsy+ 72,val_to_moj( P_DATA1[_num].Money ,ADD_work, 5 ), 1, 1, 5, 0,_PSET, 0 );
if ( P_DATA2[_lp ].Card_num== 0 ) {
__symbol( _wsx+ 8,_wsy+ 32,"勝", 1, 1, 5, 0,_PSET, 0 );
__symbol( _wsx+ 8,_wsy+ 64,"ち", 1, 1, 5, 0,_PSET, 0 );
P_DATA1[_num].Win++;
} else {
__symbol( _wsx+ 8,_wsy+ 32,"敗", 1, 1, 5, 0,_PSET, 0 );
__symbol( _wsx+ 8,_wsy+ 64,"け", 1, 1, 5, 0,_PSET, 0 );
__symbol( _wsx+248,_wsy+ 56,"-", 1, 1, 5, 0,_PSET, 0 );
P_DATA1[_num].Lose++;
}
_wsy+= 80;
}
}
/***************************************************************************
画面のFADE IN/OUT
***************************************************************************/
screen_fade_in()
{
int _lp1,_lp2;
for ( _lp1= 0;_lp1<=FADE_SPEED;_lp1++ ) {
for ( _lp2= 0;_lp2<16;_lp2++ )
__palette( _lp2,( int )( PAL[_lp2][ 0]/FADE_SPEED.0*_lp1 ),
( int )( PAL[_lp2][ 1]/FADE_SPEED.0*_lp1 ),
( int )( PAL[_lp2][ 2]/FADE_SPEED.0*_lp1 ) );
for ( _lp2= 0;_lp2<10000;_lp2++ );
}
}
screen_fade_out()
{
int _lp1,_lp2;
for ( _lp1=FADE_SPEED;_lp1>= 0;_lp1-- ) {
for ( _lp2= 0;_lp2<16;_lp2++ )
__palette( _lp2,( int )( PAL[_lp2][ 0]/FADE_SPEED.0*_lp1 ),
( int )( PAL[_lp2][ 1]/FADE_SPEED.0*_lp1 ),
( int )( PAL[_lp2][ 2]/FADE_SPEED.0*_lp1 ) );
for ( _lp2= 0;_lp2<10000;_lp2++ );
}
}
/***************************************************************************
マウスで押されたウィンドウ番号による分岐
***************************************************************************/
window_sub()
{
switch ( _push.st_wind ) {
case 1 : push_top_menu(); break;
case 2 : push_player_sub(); break;
case 3 : push_face_select(); break;
case 4 : push_key_board(); break;
case 6 : push_exit_button(); break;
case 7 : push_check_01(); break;
case 10 : ADD_other_player(); break;
case 12 : ADD_card_select(); break;
case 14 : ADD_end_menu(); break;
}
}
/***************************************************************************
トップメニュー
***************************************************************************/
push_top_menu()
{
switch ( _push.st_but ) {
case 1 : push_game_start(); break;
case 2 : END_FLAG= 1; break;
}
}
/***************************************************************************
エンドメニュー
***************************************************************************/
ADD_end_menu()
{
screen_fade_out();
window_close( 13 );
window_close( 14 );
switch ( _push.st_but ) {
case 1 : ADD_main(); break;
case 2 : window_open( 1 );
screen_fade_in(); break;
}
}
/***************************************************************************
キャラクタ登録
***************************************************************************/
push_game_start()
{
int _lp;
screen_fade_out();
window_close( 1 );
box_frame( 8, 8,623,383,_OFF );
box_frame( 224, 12,191, 23,_ON );
__symbol( 232, 16,"彡 キャラクタ登録 彡", 1, 1, 5, 0,_PSET, 0 );
window_open( 2 );
window_open( 6 );
for ( _lp= 0;_lp< 4;_lp++ )
screen_01( _lp );
screen_fade_in();
}
push_player_sub()
{
get_window_xy( 2 );
_wsx+= 19;
_wsy+= 11;
__line( _wsx+304*( TARGET_P % 2 ),_wsy+120*( TARGET_P / 2 ), 73, 5,_PSET,14,_FULL,_BETA,14 );
TARGET_P=( _push.st_but- 1 )/11;
__line( _wsx+304*( TARGET_P % 2 ),_wsy+120*( TARGET_P / 2 ), 73, 5,_PSET, 4,_FULL,_BETA, 5 );
switch ( ( _push.st_but- 1 ) % 11 ) {
case 1 : window_close( 4 );
window_close( 5 );
window_open( 3 ); break;
case 2 : window_close( 3 );
window_open( 4 );
window_open( 5 );
DUM_NAME[ 0]='\0';
NAME_LNG= 0;
screen_02(); break;
case 5 : P_DATA1[TARGET_P].Play=( P_DATA1[TARGET_P].Play+ 1 ) % 3;
screen_01( TARGET_P ); break;
}
}
push_face_select()
{
window_close( 3 );
P_DATA1[TARGET_P].Face=_push.st_but- 1;
screen_01( TARGET_P );
}
push_key_board()
{
switch ( _push.st_but ) {
case 59 : if ( NAME_LNG> 0 ) {
NAME_LNG -= 2 ;
DUM_NAME[NAME_LNG] ='\0';
screen_02();
} break;
case 60 : if ( NAME_LNG> 0 ) {
strcpy( P_DATA1[TARGET_P].Name,DUM_NAME );
window_close( 4 );
window_close( 5 );
screen_01( TARGET_P );
} break;
default : if ( NAME_LNG< 8 ) {
NAME_LNG+= 2;
strncat( DUM_NAME,KEY_BOARD+ 2*( _push.st_but- 1 ), 2 );
screen_02();
}
}
}
push_exit_button()
{
window_close( 3 );
window_close( 4 );
window_close( 5 );
window_open( 7 );
window_control( _T_ALL, 7,_STOP );
}
push_check_01()
{
int _lp;
window_close( 7 );
window_control( _T_ALL, 0,_ON );
if ( _push.st_but== 1 ) {
PLY_NUM= 0;
for ( _lp= 0;_lp< 4;_lp++ )
if ( P_DATA1[_lp].Play!=PLAY_REST )
P_DATA2[PLY_NUM++].Player=_lp;
if ( PLY_NUM>= 2 ) {
screen_fade_out();
window_close( 2 );
window_close( 6 );
box_frame( 0, 0,639,399,_OFF );
ADD_main();
}
}
}
/***************************************************************************
ADDゲームメイン部分
***************************************************************************/
ADD_Gcopy( int _sx1,int _sy1,int _wx,int _wy,int _sx2,int _sy2 )
{
MOUSE_OFF;
__screen( 1, 0 );
VRAM_Gget( _sx1,_sy1,_wx,_wy,ADD_work );
__screen( 0, 0 );
VRAM_Gput( _sx2,_sy2,_wx,_wy,ADD_work );
MOUSE_ON ;
}
ADD_main()
{
ADD_init();
screen_fade_in();
while ( WIN_FLAG== 0 && POUR_FLAG== 0 ) {
ADD_FLAG= 0;
if ( LUC_NUM== 0 )
ADD_move_next_player();
if ( P_DATA1[P_DATA2[TARGET_P].Player].Play==PLAY_COM )
ADD_COM_brain( TARGET_P );
else
while ( ADD_FLAG== 0 )
if ( button_wait( 0 )== 0 ) window_sub();
}
if ( POUR_FLAG!= 0 ) {
PUT_message( 19 );
PUT_message( 20 );
screen_09();
} else {
screen_09();
window_open( 13 );
ADD_adjustment();
screen_10();
}
window_open( 14 );
screen_fade_in();
}
ADD_init()
{
int _lp;
srand( ( unsigned )clock() );
window_open( 8 );
window_open( 9 );
window_open( 10 );
window_open( 11 );
window_open( 12 );
window_control( _T_ALL,12,_STOP );
TARGET_P =rand() % PLY_NUM;
M_CARD =CARD_ALL;
KEY_NUM =-1;
LIFE_NUM =PLY_NUM;
PASS_NUM =LIFE_NUM;
LUC_NUM = 0;
POUR_FLAG= 0;
WIN_FLAG = 0;
for ( _lp= 0;_lp<PLY_NUM;_lp++ )
P_DATA2[_lp].Life=COND_PLAY;
MOUSE_OFF;
Gput_DISK_to_VRAM( "MESS_BOX.CG",280,224 );
Gput_DISK_to_VRAM( "ADD_LOGO.CG",472, 16 );
MOUSE_ON ;
ADD_deal_card();
screen_03();
screen_07();
}
ADD_adjustment()
{
int _lp1= 0,_lp2,_dum= 0,_num;
for ( ;_lp1<PLY_NUM;_lp1++ )
for ( _lp2= 0,P_DATA2[_lp1].Adjust= 0;_lp2<P_DATA2[_lp1].Card_num;_lp2++ ) {
P_DATA2[_lp1].Adjust+=( P_DATA2[_lp1].Card[_lp2]<52 ? 50 : 200 );
_dum +=( P_DATA2[_lp1].Card[_lp2]<52 ? 50 : 200 );
}
for ( _lp1= 0;_lp1<PLY_NUM;_lp1++ ) {
_num=P_DATA2[_lp1].Player;
if ( P_DATA2[_lp1].Card_num== 0 )
P_DATA1[_num].Money+=( P_DATA2[_lp1].Adjust=_dum );
else
P_DATA1[_num].Money-=P_DATA2[_lp1].Adjust;
}
}
ADD_deal_card()
{
int _lp1,_lp2,_card;
for ( _lp1= 0;_lp1<CARD_ALL;_lp1++ )
CHK_CARD[_lp1]= 0;
for ( _lp1= 0;_lp1<PLY_NUM;_lp1++ ) {
P_DATA2[_lp1].Card_num= 0;
ADD_get_mountain_card( _lp1,10 );
}
}
ADD_arrange_card( int _pl )
{
int _chk= 0,_cd1,_cd2,_cn1,_cn2,_lp;
while ( _chk!=( P_DATA2[_pl].Card_num- 1 ) ) {
_cd1=P_DATA2[_pl].Card[_chk ];
_cd2=P_DATA2[_pl].Card[_chk+ 1];
_cn1=_cd1 % 13 ;
_cn2=_cd2 % 13 ;
if ( _cd2< 52 && ( _cn1>_cn2 || ( _cn1==_cn2 && _cd1>_cd2 ) ) ||
_cd1>=52 && ( _cd2< 52 || ( _cd1> _cd2 ) ) ) {
P_DATA2[_pl].Card[_chk ]=_cd2;
P_DATA2[_pl].Card[_chk+ 1]=_cd1;
_chk-=( _chk== 0 ? 1 : 2 );
}
_chk++;
}
}
ADD_other_player()
{
int _lp= 0,_num=TARGET_P;
if ( _push.st_but<LIFE_NUM ) {
for ( ;_lp<_push.st_but;_lp++ )
do _num=( _num+ 1 ) % PLY_NUM;
while ( P_DATA2[_num].Life==-1 );
if ( LUC_NUM== 1 ) ADD_shower_handle( _num );
else ADD_change_handle( _num );
LUC_NUM = 0;
ADD_FLAG= 1;
window_control( _T_ALL, 0,_ON );
window_control( _T_ALL,12,_STOP );
}
}
ADD_shower_handle( int _num )
{
PUT_message( 17,_num, 0 );
ADD_get_mountain_card( _num, 3 );
}
ADD_change_handle( int _num )
{
int _lp= 0,_dum;
PUT_message( 15,TARGET_P,_num );
_dum =P_DATA2[TARGET_P].Card_num;
P_DATA2[TARGET_P].Card_num=P_DATA2[_num].Card_num;
P_DATA2[_num].Card_num =_dum;
for ( ;_lp<20;_lp++ ) {
_dum =P_DATA2[TARGET_P].Card[_lp];
P_DATA2[TARGET_P].Card[_lp]=P_DATA2[_num].Card[_lp];
P_DATA2[_num].Card[_lp] =_dum;
}
}
ADD_card_select()
{
int _cx= _mos.st_x>= 48 ? ( _mos.st_x-_wsx- 8 )/16- 2 : 0 ;
int _sx=_wsx+( _cx != 0 ? _cx* 16+ 40 : 8 );
int _wx= _cx != 0 ? 15 : 47 ;
int _num,_but_mem ;
switch ( _but_mem=_push.st_but ) {
case 1 : if ( P_DATA2[TARGET_P].Card_num>_cx ) {
__line( _sx,_wsy+ 16,_wx, 63,_XOR, 4,_FULL,_BETA, 4 );
SEL_CARD[_cx]= 1-SEL_CARD[_cx];
}
break;
case 2 : ADD_pass_handle();
break;
case 3 : switch ( ADD_select_check( &_num ) ) {
case 0 : LUC_NUM= 0;
KEY_NUM=_num;
ADD_put_card();
screen_07();
break;
case 1 : LUC_NUM=_num;
ADD_put_card();
if ( WIN_FLAG== 0 ) {
PUT_message( 5+LUC_NUM, 0, 0 );
ADD_luckey_handle();
}
break;
}
break;
}
}
ADD_select_check( int *_ret )
{
if ( ADD_the_number_of_card()> 3 )
return( -1 );
else
if ( ADD_get_select_only()== 0 )
return ( -1 );
else
if ( ( *_ret=ADD_luckey_check() )!=-1 )
return ( 1 );
else
if ( KEY_NUM==-1 && ADD_get_select_only()> 1 )
return ( -1 );
else
if ( ( *_ret=ADD_number_check() )!=-1 )
return ( 0 );
else
return( -2 );
}
ADD_luckey_check()
{
int _num=ADD_get_select_only(),_lp,_count= 0,_chk= 0;
if ( _num== 3 && SEL_ONLY[ 2]<52 &&
( SEL_ONLY[ 0] % 13 )==( SEL_ONLY[ 1] % 13 ) &&
( SEL_ONLY[ 0] % 13 )==( SEL_ONLY[ 2] % 13 ) )
return ( 1 );
for ( ;_num> 0;_num-- ) {
_count+=( SEL_ONLY[_num- 1]>=52 );
_chk -=( SEL_ONLY[_num- 1]< 52 );
}
if ( _chk< 0 || _count== 0 )
return ( -1 );
else
return ( _count );
}
ADD_number_check()
{
int _num=ADD_get_select_only(),_ret= 0,_sum= 0;
for ( ;_num> 0;_num-- ) {
_sum+=( SEL_ONLY[_num- 1] % 13 )+ 1;
_ret-=( SEL_ONLY[_num- 1]>=52 );
}
_sum%=10;
if ( _ret< 0 )
return ( -1 );
else
if ( KEY_NUM==_sum || KEY_NUM==-1 )
return ( _sum );
else
return ( -1 );
}
ADD_get_select_only()
{
int _lp,_count= 0;
SEL_ONLY[ 0]=SEL_ONLY[ 1]=SEL_ONLY[ 2]= 0;
for ( _lp= 0;_lp<20;_lp++ )
if ( SEL_CARD[_lp] )
SEL_ONLY[_count++]=P_DATA2[TARGET_P].Card[_lp];
return ( _count );
}
ADD_the_number_of_card()
{
int _lp,_ret= 0;
for ( _lp= 0;_lp<20;_lp++ )
if ( SEL_CARD[_lp]== 1 ) _ret++;
return ( _ret );
}
ADD_put_card()
{
int _num=ADD_get_select_only(),_lp1= 0,_lp2,_count= 0;
screen_06();
PUT_message( LUC_NUM== 0 ? 5 : 16, 0, 0 );
for ( _lp2= 0;_lp2<CARD_ALL;_lp2++ )
if ( CHK_CARD[_lp2]== 3 )
CHK_CARD[_lp2]= 2;
while ( _num!=_count ) {
CHK_CARD[SEL_ONLY[_count]]= 3;
while ( P_DATA2[TARGET_P].Card[_lp1]!=SEL_ONLY[_count] )
_lp1++;
for ( _lp2=_lp1;_lp2<19;_lp2++ )
P_DATA2[TARGET_P].Card[_lp2]=P_DATA2[TARGET_P].Card[_lp2+ 1];
_count++;
}
if ( ( P_DATA2[TARGET_P].Card_num-=_num )== 0 ) {
WIN_FLAG= 1;
PUT_message( 11, 0, 0 );
}
PASS_NUM =LIFE_NUM;
ADD_FLAG = 1;
}
ADD_pass_handle()
{
PUT_message( 9, 0, 0 );
ADD_get_mountain_card( TARGET_P, 1 );
ADD_FLAG= 1;
if ( --PASS_NUM== 1 )
ADD_pour_key();
}
ADD_luckey_handle()
{
if ( LUC_NUM!= 2 ) {
window_control( _T_ALL, 0,_ON );
window_control( _T_ALL,10,_STOP );
PUT_message( 11+LUC_NUM, 0, 0 );
} else {
ADD_pour_key();
TARGET_P-= 1;
LUC_NUM= 0;
}
}
ADD_move_next_player()
{
int _count= 0;
if ( WIN_FLAG== 0 ) {
do {
TARGET_P=( TARGET_P+ 1 ) % PLY_NUM;
_count++;
} while ( P_DATA2[TARGET_P].Life!=COND_PLAY && _count<PLY_NUM );
screen_04( TARGET_P );
screen_05( TARGET_P );
}
screen_08();
PUT_message( P_DATA1[P_DATA2[TARGET_P].Player].Play==PLAY_COM ? 3 : 18,TARGET_P, 0 );
}
ADD_get_mountain_card( int _pl,int _num )
{
int _lp,_card;
if( P_DATA2[_pl].Card_num>20-_num )
ADD_flat_player( _pl );
else
for ( _lp= 0;_lp<_num;_lp++ ) {
if ( M_CARD== 0 )
if ( ADD_make_mountain_card()== 0 )
POUR_FLAG= 1;
if ( POUR_FLAG== 0 ) {
do _card=rand() % CARD_ALL;
while ( CHK_CARD[_card]!= 0 );
M_CARD--;
CHK_CARD[_card]++;
P_DATA2[_pl].Card[P_DATA2[_pl].Card_num++]=_card;
}
}
ADD_arrange_card( _pl );
}
ADD_flat_player( int _pl )
{
int _lp;
WIN_FLAG+=( --LIFE_NUM== 1 );
for ( _lp= 0;_lp<P_DATA2[_pl].Card_num;_lp++ )
CHK_CARD[P_DATA2[_pl].Card[_lp]]= 2;
P_DATA2[_pl].Life=COND_FLAT;
get_window_xy( 8 );
for ( _lp= 1;_lp<79;_lp++ )
__line( _wsx+ 1,_wsy+ 80*_pl+ 65+_lp,165, 0,_PSET, 0,_LIN, 0,0x5555 << ( _lp % 2 ) );
get_window_xy( 10 );
__line( _wsx-159+160*LIFE_NUM,_wsy+ 1,125,109,_PSET,14,_FULL,_BETA,14 );
for ( _lp= 1;_lp<111;_lp++ )
__line( _wsx-159+160*LIFE_NUM,_wsy+ 1+_lp,125, 0,_PSET, 0,_LIN, 0,0x5555 << ( _lp % 2 ) );
}
ADD_make_mountain_card()
{
int _lp,_ret= 0;
for ( _lp= 0;_lp<CARD_ALL;_lp++ )
if ( CHK_CARD[_lp]== 2 ) {
_ret++;
M_CARD++;
CHK_CARD[_lp]= 0;
}
return ( _ret );
}
ADD_pour_key()
{
KEY_NUM =-1;
PASS_NUM=LIFE_NUM;
PUT_message( 10, 0, 0 );
get_window_xy( 9 );
__line( _wsx+144,_wsy+ 8,159, 63,_PSET,14,_FULL,_BETA,14 );
screen_07();
}
/***************************************************************************
コンピュータの脳ミソ部分
***************************************************************************/
ADD_COM_brain( int _pl )
{
int _lp,_num1,_num2,_num3;
PUT_message( 4, 0, 0 );
for ( _lp= 0;_lp<660;_lp++ )
ADD_work[_lp]= 0;
ADD_COM_card_cnv( _pl );
/********************************************************************
Select check level 1
********************************************************************/
if ( KEY_NUM==-1 ) {
if ( ADD_COM_num_percent( _pl )== 0 )
ADD_work[300]=P_DATA2[_pl].Card[ 0];
else {
for ( _lp= 0,_num1= 0;_lp<10;_lp++ )
_num1=ADD_work[_num1]<ADD_work[_lp] ? _lp : _num1;
ADD_work[300]=_num1+ 1;
}
ADD_work[301]= 0 ;
ADD_work[302]= 0 ;
ADD_COM_put_card( _pl, 1 );
return;
}
/********************************************************************
Select check level 2
********************************************************************/
if ( ( _num1=ADD_COM_get_top_num( &_num2 ) )< 6 )
if ( ( rand() % 100 )<13*( 6-_num1 ) && ADD_work[10]>= 1 ) {
ADD_COM_luckey_make( LUC_NUM= 1 );
return;
}
/********************************************************************
Select check level 3
********************************************************************/
if ( ADD_COM_num_percent( _pl )>=70 &&
( ( ADD_COM_get_top_num( &_num1 )* 2 )<=P_DATA2[_pl].Card_num ||
ADD_COM_get_top_num( &_num1 )< 4 ) )
if ( ADD_work[10]>= 3 && ( rand() % 100 )<70 ) {
ADD_COM_luckey_make( LUC_NUM= 3 );
return;
} else if ( ADD_work[10]>= 1 && ( rand() % 100 )<35 ) {
ADD_COM_luckey_make( LUC_NUM= 1 );
return;
}
/********************************************************************
Select check level 4
********************************************************************/
ADD_COM_pick_up_pear( KEY_NUM, 1,&_num1,&_num2 );
if ( ( _num3=ADD_COM_key_check_01( KEY_NUM, 3,_num1 ) )!= 0 ) {
ADD_COM_put_card( _pl,_num3 );
return;
}
/********************************************************************
Select check level 5
********************************************************************/
ADD_COM_pick_up_pear( KEY_NUM, 2,&_num1,&_num2 );
if ( ( _num3=ADD_COM_key_check_02( KEY_NUM,_num1,_num2 ) )!= 0 ) {
ADD_COM_put_card( _pl,_num3 );
return;
}
/********************************************************************
Select check level 6
********************************************************************/
ADD_COM_pick_up_pear( KEY_NUM, 1,&_num1,&_num2 );
if ( ( _num3=ADD_COM_key_check_01( KEY_NUM, 2,_num1 ) )!= 0 ) {
ADD_COM_put_card( _pl,_num3 );
return;
}
/********************************************************************
Select check level 7
********************************************************************/
if ( ( _num3=ADD_COM_pick_up_pear( KEY_NUM, 2,&_num1,&_num2 ) )!= 0 ) {
ADD_COM_put_card( _pl,_num3 );
return;
}
/********************************************************************
Select check level 8
********************************************************************/
if ( ( _num3=ADD_COM_pick_up_pear( KEY_NUM, 1,&_num1,&_num2 ) )!= 0 ) {
ADD_COM_put_card( _pl,_num3 );
return;
}
/********************************************************************
Select check level 9
********************************************************************/
if ( ( rand() % 100 )<85 && ADD_work[10]>= 2 ) {
ADD_COM_luckey_make( LUC_NUM= 2 );
return;
}
ADD_pass_handle();
}
ADD_COM_get_top_num( int *_pl )
{
int _lp1,_num=100;
for ( _lp1= 0;_lp1<PLY_NUM;_lp1++ )
if ( _lp1!=TARGET_P && P_DATA2[_lp1].Card_num<_num )
_num=P_DATA2[( *_pl=_lp1 )].Card_num;
return ( _num );
}
ADD_COM_num_percent( int _pl )
{
int _c_all=P_DATA2[_pl].Card_num;
int _c_num=_c_all-ADD_work[10];
return ( ( int )( ( double )_c_num / _c_all*100.0 ) );
}
ADD_COM_luckey_make( int _num )
{
int _lp;
for ( _lp= 0;_lp<_num;_lp++ )
ADD_work[300+_lp]=P_DATA2[TARGET_P].Card[P_DATA2[TARGET_P].Card_num-_lp- 1];
ADD_COM_put_card( TARGET_P, 1 );
}
ADD_COM_put_card( int _pl,int _num1 )
{
int _lp1,_lp2,_num2=( rand() % _num1 )* 3,_flag1,_key= 0;
for ( _lp1= 0;_lp1< 3;_lp1++ ) {
_lp2 =_flag1= 0;
_key +=ADD_work[300+_num2+_lp1];
while ( _lp2<P_DATA2[_pl].Card_num && _flag1== 0 ) {
if ( SEL_CARD[_lp2]== 0 &&
( P_DATA2[_pl].Card[_lp2]< 52 && ( ( P_DATA2[_pl].Card[_lp2] % 13 ) % 10 )==( ADD_work[300+_num2+_lp1]- 1 ) ) ||
( P_DATA2[_pl].Card[_lp2]>=52 && P_DATA2[_pl].Card[_lp2] == ADD_work[300+_num2+_lp1] ) )
SEL_CARD[_lp2]=_flag1= 1;
_lp2++;
}
}
if ( LUC_NUM== 0 && ADD_get_select_only()== 3 )
if ( ( ( SEL_ONLY[ 0] % 13 )==( SEL_ONLY[ 1] % 13 ) ) &&
( ( SEL_ONLY[ 0] % 13 )==( SEL_ONLY[ 2] % 13 ) ) )
LUC_NUM= 1;
ADD_put_card();
if ( LUC_NUM== 0 )
KEY_NUM=_key % 10;
else {
if ( WIN_FLAG== 0 ) {
PUT_message( 5+LUC_NUM, 0, 0 );
ADD_COM_get_top_num( &_num2 );
switch ( LUC_NUM ) {
case 1 : ADD_shower_handle( _num2 );
break;
case 2 : ADD_pour_key();
TARGET_P-= 1;
break;
case 3 : ADD_change_handle( _num2 );
break;
}
}
LUC_NUM = 0;
ADD_FLAG= 1;
}
screen_07();
}
/***************************************************************************
下1桁各数のカード枚数収得(ADD_work[ 0]~)
***************************************************************************/
ADD_COM_card_cnv( int _pl )
{
int _lp;
for ( _lp= 0;_lp<P_DATA2[_pl].Card_num;_lp++ )
if ( P_DATA2[_pl].Card[_lp]<52 )
ADD_work[( P_DATA2[_pl].Card[_lp] % 13 ) % 10]++;
else
ADD_work[10]++;
}
/***************************************************************************
1~3枚のペアを収得(ADD_work[100]~)
***************************************************************************/
ADD_COM_pick_up_pear( int _key,int _num,int *_count1,int *_count2 )
{
int _lp1,_lp2,_count3= 0;
*_count1=*_count2= 0;
for ( _lp1= 0;_lp1<10;_lp1++ ) {
for ( _lp2= 0;_lp2<( ADD_work[_lp1]!= 0 && _num== 1 ? 1 : ( ADD_work[_lp1] / _num ) );_lp2++ ) {
ADD_work[100+( *_count1 )++]=_lp1+ 1;
if ( ( ( ( _lp1+ 1 )*_num ) % 10 )==_key ) {
ADD_work[300+_count3++]= _lp1+ 1 ;
ADD_work[300+_count3++]=_num> 1 ? _lp1+ 1 : 0;
ADD_work[300+_count3++]=_num> 2 ? _lp1+ 1 : 0;
}
}
for ( _lp2= 0;_lp2<( ADD_work[_lp1] % _num );_lp2++ )
ADD_work[200+( *_count2 )++]=_lp1+ 1;
}
return ( _count3/ 3 );
}
/***************************************************************************
キーチェック その1
***************************************************************************/
ADD_COM_key_check_01( int _key,int _num,int _count1 )
{
int _lp1,_lp2,_lp3,_count2= 0,_mem1,_mem2= 0,_mem3= 0;
for ( _lp1= 0;_lp1<_count1-_num+ 1;_lp1++ ) {
_mem1=ADD_work[100+_lp1];
for ( _lp2=_lp1+ 1;_lp2<_count1-_num+ 2;_lp2++ ) {
if ( _num> 1 )
_mem2=ADD_work[100+_lp2];
for ( _lp3=_lp2+ 1;_lp3<_count1;_lp3++ ) {
if ( _num> 2 )
_mem3=ADD_work[100+_lp3];
if ( ( ( _mem1+_mem2+_mem3 ) % 10 )==_key ) {
ADD_work[300+_count2++]= _mem1 ;
ADD_work[300+_count2++]=_num> 1 ? _mem2 : 0;
ADD_work[300+_count2++]=_num> 2 ? _mem3 : 0;
}
}
}
}
return ( _count2/ 3 );
}
/***************************************************************************
キーチェック その2
***************************************************************************/
ADD_COM_key_check_02( int _key,int _count1,int _count2 )
{
int _lp1,_lp2,_count3= 0,_mem1,_mem2;
for ( _lp1= 0;_lp1<_count1;_lp1++ ) {
_mem1=ADD_work[100+_lp1];
for ( _lp2= 0;_lp2<_count1+_count2;_lp2++ ) {
_mem2=ADD_work[_lp2<_count1 ? 100+_lp2 : 200+_lp2-_count1];
if ( _lp1!=_lp2 && ( ( _mem1* 2+_mem2 ) % 10 )==_key ) {
ADD_work[300+_count3++]=_mem1;
ADD_work[300+_count3++]=_mem1;
ADD_work[300+_count3++]=_mem2;
}
}
}
return ( _count3/ 3 );
}
/***************************************************************************
メッセージの表示
***************************************************************************/
PUT_message( char _num,char _tagp1,char _tagp2 )
{
int _bof1= 0,_bof2= 0,_bof3,_dum,_flag= 0;
char _cnt,_buf[256];
while ( _flag== 0 ) {
while ( *( MOJ_WORK[_num]+_bof1 )!='$' )
_buf[_bof2++]=*( MOJ_WORK[_num]+_bof1++ );
_dum=( _cnt=*( MOJ_WORK[_num]+( ++_bof1 ) ) )-'0';
_bof1++;
_bof3= 0;
if ( _dum>= 1 && _dum<= 2 ) {
_dum=_dum== 1 ? _tagp1 : _tagp2;
while ( ( _buf[_bof2]=P_DATA1[P_DATA2[_dum].Player].Name[_bof3++] )!='\0' )
_bof2++;
} else {
_buf[_bof2]='\0';
_flag= 1;
}
}
get_window_xy( 11 );
__line( _wsx+280,_wsy+ 16,143, 47,_PSET, 0,_FULL,_BETA, 0 );
_buf[255]='\0';
_bof1= 0;
while ( _buf[_bof1]!='\0' ) {
*( int * )&_buf[253]=*( int * )&_buf[_bof1];
__symbol( _wsx+280+ 8*( _bof1 % 18 ),_wsy+ 16+ 16*( _bof1 / 18 ),_buf+253, 1, 1,15, 0,_PSET, 0 );
_bof1+= 2;
beep( 440,10 );
for ( _bof2= 0;_bof2<2000;_bof2++ );
}
if ( _cnt=='!' )
mouse_wait( 4, 0, 8 );
}
/***************************************************************************
ビープ発音(TOWNS用)
***************************************************************************/
beep_FM( int _freq,int _tim )
{
_asm {
MOV AH,05H
MOV BX,_tim
MOV DX,_freq
INT 9EH
}
}
/***************************************************************************
ビープ発音(PC-98用)
***************************************************************************/
beep_PC( int _freq,int _tim )
{
int _num =( int )( ( long )2457600/_freq );
char _f_hi=( char )* ( char * )&_num ;
char _f_lw=( char )*( ( char * )&_num+ 1 ) ;
_asm {
MOV DX,3FDBH
MOV AL,_f_hi
OUT DX,AL
MOV AL,_f_lw
OUT DX,AL
}
printf( "\a" );
}
/***************************************************************************
ADDタイトル
***************************************************************************/
ADD_title()
{
MOUSE_OFF;
Gput640_DISK_to_VRAM( "ADD_TITL.CG", 0, 0 );
MOUSE_ON ;
screen_fade_in();
mouse_wait( 1, 0, 2 );
screen_fade_out();
__gcls();
}
/***************************************************************************
ウィンドウの描画
***************************************************************************/
window_draw( int _win )
{
int _dsx1,_dsy1,_dsx2,_dsy2,_lp;
switch ( _win ) {
case 1 : panel( 1,_OFF );
__symbol( 24, 20," MENU ", 1, 1, 5, 0,_PSET, 0 );
__symbol( 24, 52,"ゲーム開始", 1, 1, 3, 0,_PSET, 0 );
__symbol( 24, 84," さよなら ", 1, 1, 3, 0,_PSET, 0 );
break;
case 2 : panel( 2,_NO );
for ( _lp= 0;_lp< 4;_lp++ ) {
_dsx1=120+304*( _lp % 2 );
_dsy1= 12+120*( _lp / 2 );
__symbol( _dsx1,_dsy1 ,"なまえ" , 1, 1, 3, 0,_PSET, 0 );
__symbol( _dsx1,_dsy1+ 24,"持ち金 ¥ ", 1, 1, 3, 0,_PSET, 0 );
__symbol( _dsx1,_dsy1+ 48,"勝敗積 勝 敗", 1, 1, 3, 0,_PSET, 0 );
__symbol( _dsx1,_dsy1+ 72,"プレイ" , 1, 1, 3, 0,_PSET, 0 );
}
break;
case 3 : panel( 3,_ON );
for ( _lp= 0;_lp< 6;_lp++ ) {
_dsx1= 48+192*( _lp % 3 );
_dsy1=256+ 64*( _lp / 3 );
_dsx2= 48+ 96* _lp ;
ADD_Gcopy( _dsx1,_dsy1, 64, 64,_dsx2, 56 );
}
break;
case 4 : panel( 4,_ON );
__symbol( 36, 12,"あいうえお かきくけこ さしすせそ たちつてと", 1, 1, 3, 0,_PSET, 8 );
__symbol( 36, 40,"なにぬねの はひふへほ まみむめも やゆよ゛゜", 1, 1, 3, 0,_PSET, 8 );
__symbol( 36, 68,"らりるれろ わをんーぁ ぃぅぇぉっ ゃゅょ" , 1, 1, 3, 0,_PSET, 8 );
__symbol( 516, 68,"BS CR" , 1, 1, 3, 0,_PSET, 0 );
break;
case 5 : panel( 5,_NO );
break;
case 6 : panel( 6,_NO );
__symbol( 8, 4,"EXIT", 1, 1, 3, 0,_PSET, 0 );
break;
case 7 : panel( 7,_OFF );
__symbol( 24, 20,"ぼちぼちゲームを始めよか? " , 1, 1, 5, 0,_PSET, 0 );
__symbol( 20, 52,"さぁ、始めよか ちょっと待てぃ", 1, 1, 3, 0,_PSET, 0 );
break;
case 8 : panel( 8,_NO );
break;
case 9 : panel( 9,_NO );
break;
case 10 : panel( 10,_NO );
break;
case 11 : panel( 11,_OFF );
break;
case 12 : panel( 12,_OFF );
__symbol( 384, 44,"パ ス", 1, 1, 5, 0,_PSET, 0 );
__symbol( 384, 68,"出 す", 1, 1, 5, 0,_PSET, 0 );
break;
case 13 : panel( 13,_OFF );
for ( _lp= 0;_lp< 4;_lp++ ) {
__symbol( 136, 24+ 80*_lp,"名 前" , 1, 1, 3, 0,_PSET, 0 );
__symbol( 136, 40+ 80*_lp,"残りカード まい", 1, 1, 3, 0,_PSET, 0 );
__symbol( 136, 56+ 80*_lp,"精 算 ¥" , 1, 1, 3, 0,_PSET, 0 );
__symbol( 136, 72+ 80*_lp,"残 金 ¥" , 1, 1, 3, 0,_PSET, 0 );
}
break;
case 14 : panel( 14,_OFF );
__symbol( 24, 20,"再プレイ", 1, 1, 3, 0,_PSET, 0 );
__symbol( 24, 52,"おしまい", 1, 1, 3, 0,_PSET, 0 );
break;
}
}
middle_handle()
{
}
/* sw sx sy wx wy but */
int wind_dat[][ 7]={ { _OFF, 0, 0, 0, 0, 0 },
/* TOP MENU */ { _OFF, 8, 8,127,119, 4 },
/* SETTING MENU 1 */ { _OFF, 16,144,607,239,44 },
/* FACE SELECT */ { _OFF, 24, 40,591, 95, 6 },
/* KEY BOARD */ { _OFF, 24, 40,591, 95,60 },
/* NAME WINDOW */ { _OFF, 24, 12, 79, 23, 1 },
/* EXIT BUTTON */ { _OFF,536, 12, 79, 23, 1 },
/* CHECK 1 */ { _OFF,184, 48,271, 87, 3 },
/* MAIN SCREEN 1 */ { _OFF,464, 8,159,383, 5 },
/* MAIN SCREEN 2 */ { _OFF, 8, 8,447, 79, 3 },
/* MAIN SCREEN 3 */ { _OFF, 8, 96,447,111, 3 },
/* MAIN SCREEN 4 */ { _OFF, 8,216,447, 79, 1 },
/* MAIN SCREEN 5 */ { _OFF, 8,296,447, 95, 3 },
/* RESULT SCREEN */ { _OFF,144, 24,351,351, 8 },
/* END WINDOW */ { _OFF,520,304,111, 87, 2 },
{ _OFF, 96,136,143, 39, 2 } };
/* sx sy wx wy st md en sw rev */
int but_dat[][ 9] ={ { 0, 0, 0, 0, 0, 0, 0,_OFF,_OFF },
/* TOP MENU */ { 16, 48, 95, 23, 1, 0, 2,_OFF,_ON },
{ 16, 80, 95, 23, 1, 0, 2,_OFF,_ON },
{ 16,112, 95, 23, 0, 0, 0,_NO ,_OFF },
{ 16, 16, 95, 23, 0, 0, 0,_ON ,_OFF },
/* SETTING MENU 1 */ { 8, 0,287,111, 4, 0, 8,_ON ,_ON },
{ 16, 24, 79, 79, 1, 0, 2,_ON ,_ON },
{ 112, 8, 63, 23, 1, 0, 2,_OFF,_ON },
{ 112, 32, 63, 23, 1, 0, 2,_OFF,_ON },
{ 112, 56, 63, 23, 1, 0, 2,_OFF,_ON },
{ 112, 80, 63, 23, 1, 0, 2,_OFF,_ON },
{ 176, 8,112, 23, 0, 0, 0,_ON ,_OFF },
{ 176, 32,112, 23, 0, 0, 0,_ON ,_OFF },
{ 176, 56,112, 23, 0, 0, 0,_ON ,_OFF },
{ 176, 80,112, 23, 0, 0, 0,_ON ,_OFF },
{ 16, 8, 79, 11, 0, 0, 0,_ON ,_OFF },
{ 312, 0,287,111, 4, 0, 8,_ON ,_ON },
{ 320, 24, 79, 79, 1, 0, 2,_ON ,_ON },
{ 416, 8, 63, 23, 1, 0, 2,_OFF,_ON },
{ 416, 32, 63, 23, 1, 0, 2,_OFF,_ON },
{ 416, 56, 63, 23, 1, 0, 2,_OFF,_ON },
{ 416, 80, 63, 23, 1, 0, 2,_OFF,_ON },
{ 480, 8,112, 23, 0, 0, 0,_ON ,_OFF },
{ 480, 32,112, 23, 0, 0, 0,_ON ,_OFF },
{ 480, 56,112, 23, 0, 0, 0,_ON ,_OFF },
{ 480, 80,112, 23, 0, 0, 0,_ON ,_OFF },
{ 320, 8, 79, 11, 0, 0, 0,_ON ,_OFF },
{ 8,120,287,111, 4, 0, 8,_ON ,_ON },
{ 16,144, 79, 79, 1, 0, 2,_ON ,_ON },
{ 112,128, 63, 23, 1, 0, 2,_OFF,_ON },
{ 112,152, 63, 23, 1, 0, 2,_OFF,_ON },
{ 112,176, 63, 23, 1, 0, 2,_OFF,_ON },
{ 112,200, 63, 23, 1, 0, 2,_OFF,_ON },
{ 176,128,112, 23, 0, 0, 0,_ON ,_OFF },
{ 176,152,112, 23, 0, 0, 0,_ON ,_OFF },
{ 176,176,112, 23, 0, 0, 0,_ON ,_OFF },
{ 176,200,112, 23, 0, 0, 0,_ON ,_OFF },
{ 16,128, 79, 11, 0, 0, 0,_ON ,_OFF },
{ 312,120,287,111, 4, 0, 8,_ON ,_ON },
{ 320,144, 79, 79, 1, 0, 2,_ON ,_ON },
{ 416,128, 63, 23, 1, 0, 2,_OFF,_ON },
{ 416,152, 63, 23, 1, 0, 2,_OFF,_ON },
{ 416,176, 63, 23, 1, 0, 2,_OFF,_ON },
{ 416,200, 63, 23, 1, 0, 2,_OFF,_ON },
{ 480,128,112, 23, 0, 0, 0,_ON ,_OFF },
{ 480,152,112, 23, 0, 0, 0,_ON ,_OFF },
{ 480,176,112, 23, 0, 0, 0,_ON ,_OFF },
{ 480,200,112, 23, 0, 0, 0,_ON ,_OFF },
{ 320,128, 79, 11, 0, 0, 0,_ON ,_OFF },
/* FACE SELECT */ { 16, 8, 79, 79, 1, 0, 2,_OFF,_ON },
{ 112, 8, 79, 79, 1, 0, 2,_OFF,_ON },
{ 208, 8, 79, 79, 1, 0, 2,_OFF,_ON },
{ 304, 8, 79, 79, 1, 0, 2,_OFF,_ON },
{ 400, 8, 79, 79, 1, 0, 2,_OFF,_ON },
{ 496, 8, 79, 79, 1, 0, 2,_OFF,_ON },
/* KEY BOARD */ { 32, 8, 23, 23, 1, 0, 2,_OFF,_ON },
{ 56, 8, 23, 23, 1, 0, 2,_OFF,_ON },
{ 80, 8, 23, 23, 1, 0, 2,_OFF,_ON },
{ 104, 8, 23, 23, 1, 0, 2,_OFF,_ON },
{ 128, 8, 23, 23, 1, 0, 2,_OFF,_ON },
{ 168, 8, 23, 23, 1, 0, 2,_OFF,_ON },
{ 192, 8, 23, 23, 1, 0, 2,_OFF,_ON },
{ 216, 8, 23, 23, 1, 0, 2,_OFF,_ON },
{ 240, 8, 23, 23, 1, 0, 2,_OFF,_ON },
{ 264, 8, 23, 23, 1, 0, 2,_OFF,_ON },
{ 304, 8, 23, 23, 1, 0, 2,_OFF,_ON },
{ 328, 8, 23, 23, 1, 0, 2,_OFF,_ON },
{ 352, 8, 23, 23, 1, 0, 2,_OFF,_ON },
{ 376, 8, 23, 23, 1, 0, 2,_OFF,_ON },
{ 400, 8, 23, 23, 1, 0, 2,_OFF,_ON },
{ 440, 8, 23, 23, 1, 0, 2,_OFF,_ON },
{ 464, 8, 23, 23, 1, 0, 2,_OFF,_ON },
{ 488, 8, 23, 23, 1, 0, 2,_OFF,_ON },
{ 512, 8, 23, 23, 1, 0, 2,_OFF,_ON },
{ 536, 8, 23, 23, 1, 0, 2,_OFF,_ON },
{ 32, 36, 23, 23, 1, 0, 2,_OFF,_ON },
{ 56, 36, 23, 23, 1, 0, 2,_OFF,_ON },
{ 80, 36, 23, 23, 1, 0, 2,_OFF,_ON },
{ 104, 36, 23, 23, 1, 0, 2,_OFF,_ON },
{ 128, 36, 23, 23, 1, 0, 2,_OFF,_ON },
{ 168, 36, 23, 23, 1, 0, 2,_OFF,_ON },
{ 192, 36, 23, 23, 1, 0, 2,_OFF,_ON },
{ 216, 36, 23, 23, 1, 0, 2,_OFF,_ON },
{ 240, 36, 23, 23, 1, 0, 2,_OFF,_ON },
{ 264, 36, 23, 23, 1, 0, 2,_OFF,_ON },
{ 304, 36, 23, 23, 1, 0, 2,_OFF,_ON },
{ 328, 36, 23, 23, 1, 0, 2,_OFF,_ON },
{ 352, 36, 23, 23, 1, 0, 2,_OFF,_ON },
{ 376, 36, 23, 23, 1, 0, 2,_OFF,_ON },
{ 400, 36, 23, 23, 1, 0, 2,_OFF,_ON },
{ 440, 36, 23, 23, 1, 0, 2,_OFF,_ON },
{ 464, 36, 23, 23, 1, 0, 2,_OFF,_ON },
{ 488, 36, 23, 23, 1, 0, 2,_OFF,_ON },
{ 512, 36, 23, 23, 1, 0, 2,_OFF,_ON },
{ 536, 36, 23, 23, 1, 0, 2,_OFF,_ON },
{ 32, 64, 23, 23, 1, 0, 2,_OFF,_ON },
{ 56, 64, 23, 23, 1, 0, 2,_OFF,_ON },
{ 80, 64, 23, 23, 1, 0, 2,_OFF,_ON },
{ 104, 64, 23, 23, 1, 0, 2,_OFF,_ON },
{ 128, 64, 23, 23, 1, 0, 2,_OFF,_ON },
{ 168, 64, 23, 23, 1, 0, 2,_OFF,_ON },
{ 192, 64, 23, 23, 1, 0, 2,_OFF,_ON },
{ 216, 64, 23, 23, 1, 0, 2,_OFF,_ON },
{ 240, 64, 23, 23, 1, 0, 2,_OFF,_ON },
{ 264, 64, 23, 23, 1, 0, 2,_OFF,_ON },
{ 304, 64, 23, 23, 1, 0, 2,_OFF,_ON },
{ 328, 64, 23, 23, 1, 0, 2,_OFF,_ON },
{ 352, 64, 23, 23, 1, 0, 2,_OFF,_ON },
{ 376, 64, 23, 23, 1, 0, 2,_OFF,_ON },
{ 400, 64, 23, 23, 1, 0, 2,_OFF,_ON },
{ 440, 64, 23, 23, 1, 0, 2,_OFF,_ON },
{ 464, 64, 23, 23, 1, 0, 2,_OFF,_ON },
{ 488, 64, 23, 23, 1, 0, 2,_OFF,_ON },
{ 512, 64, 23, 23, 1, 0, 2,_OFF,_ON },
{ 536, 64, 23, 23, 1, 0, 2,_OFF,_ON },
/* NAME WINDOW */ { 0, 0, 79, 23, 0, 0, 0,_ON ,_OFF },
/* EXIT BUTTON */ { 0, 0, 79, 23, 1, 0, 2,_OFF,_ON },
/* EXIT BUTTON */ { 16, 48,119, 23, 1, 0, 2,_OFF,_ON },
{ 136, 48,119, 23, 1, 0, 2,_OFF,_ON },
{ 16, 16,239, 23, 0, 0, 0,_ON ,_OFF },
/* MAIN SCREEN 1 */ { 0, 0,167, 63, 1, 0, 2,_OFF,_OFF },
{ 0, 64,167, 79, 0, 0, 0,_OFF,_OFF },
{ 0,144,167, 79, 0, 0, 0,_OFF,_OFF },
{ 0,224,167, 79, 0, 0, 0,_OFF,_OFF },
{ 0,304,167, 79, 0, 0, 0,_OFF,_OFF },
/* MAIN SCREEN 2 */ { 0, 0,127, 79, 0, 0, 0,_ON ,_OFF },
{ 136, 0,175, 79, 0, 0, 0,_ON ,_OFF },
{ 320, 0,127, 79, 0, 0, 0,_ON ,_OFF },
/* MAIN SCREEN 3 */ { 0, 0,127,111, 1, 0, 2,_OFF,_ON },
{ 160, 0,127,111, 1, 0, 2,_OFF,_ON },
{ 320, 0,127,111, 1, 0, 2,_OFF,_ON },
/* MAIN SCREEN 4 */ { 190, 6, 67, 67, 1, 0, 2,_ON ,_OFF },
/* MAIN SCREEN 5 */ { 8, 16,351, 63, 1, 0, 2,_NO ,_OFF },
{ 376, 40, 63, 23, 1, 0, 2,_OFF,_ON },
{ 376, 64, 63, 23, 1, 0, 2,_OFF,_ON },
/* RESULT SCREEN */ { 32, 16, 79, 79, 0, 0, 0,_ON ,_OFF },
{ 128, 16,207, 79, 0, 0, 0,_ON ,_OFF },
{ 32, 96, 79, 79, 0, 0, 0,_ON ,_OFF },
{ 128, 96,207, 79, 0, 0, 0,_ON ,_OFF },
{ 32,176, 79, 79, 0, 0, 0,_ON ,_OFF },
{ 128,176,207, 79, 0, 0, 0,_ON ,_OFF },
{ 32,256, 79, 79, 0, 0, 0,_ON ,_OFF },
{ 128,256,207, 79, 0, 0, 0,_ON ,_OFF },
/* END WINDOW */ { 16, 16, 79, 23, 1, 0, 2,_OFF,_ON },
{ 16, 48, 79, 23, 1, 0, 2,_OFF,_ON } };
char PAL[16][ 3] = { { 0, 0, 0 },{ 4, 4, 4 },{ 6, 8,10 },{ 0, 0,15 },
{ 8,10,12 },{ 15, 0, 0 },{ 8, 0, 8 },{ 15,15,15 },
{ 13, 9, 5 },{ 0,15, 0 },{ 15,11, 8 },{ 0,15,15 },
{ 8, 8, 0 },{ 15,15, 0 },{ 8, 8, 8 },{ 15,15,15 } };
struct PLD_1 P_DATA1[ 4] = { { "きくりん", 0, 5000, 0, 0, 0 },
{ "たうんず", 1, 5000, 0, 0, 0 },
{ "ふりサン", 2, 5000, 0, 0, 0 },
{ "これサン", 3, 5000, 0, 0, 0 } };
char *KEY_BOARD = "あいうえおかきくけこさしすせそたちつてと" \
"なにぬねのはひふへほまみむめもやゆよ゛゜" \
"らりるれろわをんーぁぃぅぇぉっゃゅょ" ;
char *MOJ_WORK[] = { " 人 間 ",
"コンピュータ",
" おやすみ ",
"おっ、オレの番や。▼$!",
"少し待ってくれ。▼$!",
"これでどぉや!▼$!",
"必殺、あびせだ!!▼$!",
"必殺、ながしだ!!▼$!",
"必殺、とっかえ!!▼$!",
"あかん。パスパス。▼$!",
"さぁさぁ、流そか。▼$!",
"よっしゃ、上がり!▼$!",
"どのプレイヤーにあびせましょうか。$",
"$",
"どのプレイヤーのカードと取り替えますか。$",
"$1と$2のカードを取り替えだ!!▼$!",
"これでどぉや!▼$!",
"$1に3枚のカードをあびせた!!▼$!",
"$1の番ですよ。$",
"山のカードが無くなりました。▼$!",
"このゲームは流しましょう。▼$!",
""
};